package org.qq.tv.web.task;


import org.qq.tv.web.jsoup.*;
import org.qq.tv.web.mapper.InsertWebDate;
import org.qq.tv.web.mapper.pojo.*;
import org.qq.tv.web.mapper.pojo.task.*;
import org.qq.tv.web.service.*;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

/*
 *
 * 数据库 线程任务
 */

public class TaskSql implements Runnable, IsihuHtml {
    //更新数据存储对象
    private UpTaskDate upDate = null;
    //数据更新服务
    private UpDateService ups = null;

    public TaskSql(UpDateService up, UpTaskDate date) {
        this.ups = up;
        this.upDate = date;
    }

    @Override
    public void run() {

        //任务类型 判断
        switch (this.upDate.getTaskTyep()) {
            case UpTaskDate.addweb:
                //添加网站
                this.addweb();
                break;
            case UpTaskDate.addGroup:
                //添加分组
                SihuHtml.group(this, this.upDate);
                break;
            case UpTaskDate.upDate:
                //更新数据
                this.update();
                break;
            case UpTaskDate.videoItem:
                //视频条目解析
                this.videoHtmlPath();
                break;
            case UpTaskDate.videoMessage:
                //视频信息解析
                this.addvideo();
                break;
        }
        //释放任务数量
        this.ups.startStopSql(false);

    }

    /**
     * 判断数据库视频是否存在如果不存在者去网上获取视频信息
     */
    private void videoHtmlPath() {
        System.out.println(this.upDate.getTableVideoMessage().getName());
        System.out.println(this.upDate.getTableVideoMessage().getHtmlweb());
        //判断视频是否存在如果存在就直接返回
        TableVideoMessage vi = this.ups.getSelect().videoWebIdHtmlweb(this.upDate.getTableWeb(), this.upDate.getTableVideoMessage());
        if (vi != null) {
            if (vi.getPlaym3u8() != null) {
                System.out.println("视频与存在");
                return;
            }
        }

        System.out.println("去网上获取视频信息数据");
        //去网上获取视频信息数据
        UpTaskDate taskDate = UpTaskDate.newUpTaskDate(this.upDate);
        taskDate.setTaskTyep(UpTaskDate.videoMessage);
        this.ups.submitNet(taskDate);

    }

    private void addweb() {

        //判断网站是否存在 如果存在直接返回
        if (this.ups.getSelect().webNamw(this.upDate.getTableWeb()) != null) return;
        //开始添加网站
        InsertWebDate insert = this.ups.getInsert();
        insert.addWeb(this.upDate.getTableWeb());
        this.upDate.getTableHostWeb().setWebId(this.upDate.getTableWeb().getId());
        insert.addHost(this.upDate.getTableHostWeb());

        //提交联网任务用于添加分组
        UpTaskDate date = UpTaskDate.newUpTaskDate(this.upDate);
        date.setTaskTyep(UpTaskDate.addGroup);
        this.ups.submitNet(date);

    }

    @Override
    public void sihuGroup(UpTaskDate date) {
        TableGroups gr = this.ups.getSelect().groupNameWebid(date.getTableGroups());
        if (gr != null) {
            date.setTableGroups(gr);
            return;
        }
        this.ups.getInsert().addGroup(date.getTableGroups());


    }

    @Override
    public void sihuGroupItem(UpTaskDate date) {
        TableGroupsItem item = this.ups.getSelect().groupItemNameGroupId(date.getTableGroupsItem());
        if (item != null) return;
        this.ups.getInsert().addGroupItem(date.getTableGroupsItem());

    }

    @Override
    public void groupItemCount(String date, int count) {


    }

    /*
     * 四虎网站html解析 视频条目页面解析
     *   * 解析 视频 html 页面路径
     * 1 解析 html 路径
     */
    @Override
    public void videoItem(String date) {


    }

    @Override
    public void videoItem(String html, String name) {

    }

    /*
     *解析四虎 网站视频播放页面
     * 获取视频基本信息
     * 1 uir m3u8播放地址
     * 2 tmp 视频上传时间
     * 3 name 视频昵称
     * 4 视频下载链接
     */
    @Override
    public void videoMessage(String name, String update, String mp4, String m3u8) {
        System.out.println("视频添加完成");
        TableVideoMessage addv = new TableVideoMessage();
        addv.setVideoGroupId(this.upDate.getTableGroups().getId());
        addv.setGroupItemId(this.upDate.getTableGroupsItem().getId());
        addv.setName(name);
        addv.setHtmlweb(this.getUpDate().getTableVideoMessage().getHtmlweb());
        addv.setPlaym3u8(m3u8);
        addv.setHttpmp4(mp4);
        //获取当前系统日期
        LocalDate currentDate = LocalDate.now();
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        String formattedDate = currentDate.format(formatter);
        if (update == null) {
            addv.setUptime(formattedDate);
        }
        this.ups.getInsert().addVideoMessage(addv);
    }

    /**
     * 视频添加
     */
    private void addvideo() {
        System.out.println("视频添加");
        this.ups.getInsert().addVideoMessage(this.upDate.getTableVideoMessage());
    }

    /*
     *更数据库 任务 数据
     */
    public void update() {
        //获取所有网站
        for (TableWeb web : this.ups.getSelect().webAll()) {
            // 获取最新 网址
            TableHostWeb hostWeb = this.ups.getSelect().hostWebId(web);
            //获取网站分组
            for (TableGroups groups : this.ups.getSelect().groupWebIdAll(web)) {
                //获取分组条目
                for (TableGroupsItem item : this.ups.getSelect().groupItemGroupId(groups)) {
                    UpTaskDate sqld = new UpTaskDate();
                    sqld.setTableWeb(web);
                    sqld.setTableHostWeb(hostWeb);
                    sqld.setTableGroups(groups);
                    sqld.setTableGroupsItem(item);
                    //创建数据对象
                    UpTaskDate date = UpTaskDate.newUpTaskDate(sqld);
                    date.setTaskTyep(UpTaskDate.paginfCount);

                    //提交任务到联网去
                    this.ups.submitNet(date);
                }

            }
        }

    }

    public UpTaskDate getUpDate() {
        return upDate;
    }

    public void setUpDate(UpTaskDate upDate) {
        this.upDate = upDate;
    }

    public UpDateService getUps() {
        return ups;
    }

    public void setUps(UpDateService ups) {
        this.ups = ups;
    }
}
